/*
 * @Author: HZK
 * @Date: 2020-08-24 15:45:28
 * @LastEditTime: 2020-08-24 18:42:07
 * @LastEditors: hanfengmi
 * @Description: 基于以下代码完成下面四个练习
 */
// 1.使用fp.add(x,y)和fp.map(f,x)创建一个能让functor里的值增加的函数ex1
// app.js
const fp = require('lodash/fp')
const { Maybe, Container } = require('./support')

let maybe = Maybe.of([5, 6, 1])
let ex1 = n => fp.map(fp.add(n))
console.log('11111',maybe.map(ex1(2)))

// 2.实现一个函数ex2，能够使用fp.first获取列表第一个元素
// app.js
let xs = Container.of(['do', 'ray', 'me', 'fa', 'so', 'la', 'ti', 'do'])
let ex2 = ()=>{
    // 你需要实现的函数
    return xs.map(fp.first)._value
}
console.log('22222',ex2())


// 3.实现一个函数ex3，使用safeProp和fp.first找到user的名字首字母
let safeProp = fp.curry(function(x,o){
    return Maybe.of(o[x])
})  
let user = {id:2, name:'Albert'}
let ex3 = ()=>{
    // 你需要实现的函数
    return fp.first(safeProp('name')(user)._value)
}

console.log('33333',ex3())

// 4.使用Maybe重写ex4,不要有if语句
// app.js

let ex4 = function(n){
    if(n){
        return parseInt(n)
    }
}

let ex4_ = function(n){
    const maybe2 = Maybe.of(n)
    return maybe2.map(parseInt(n))._value
}
console.log('444444',ex4(1),ex4_(1234))
